package com.llsydn.a02advertisement;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;

/**
 * @author lilinshen
 * @title 广告条例子
 * @description 请填写相关描述
 * @date 2018/10/15 11:51
 */
public class MainActivity extends AppCompatActivity {

    private ViewPager viewPager;
    private TextView tv_title;
    private LinearLayout ll_point_group;
    private ArrayList<ImageView> imageViews;
    /**
     * 上一次高亮显示的位置
     */
    private int prePosition = 0;
    private final int[] imageIds = {
            R.drawable.a,
            R.drawable.b,
            R.drawable.c,
            R.drawable.d,
            R.drawable.e
    };
    private final String[] imageDescriptions = {
            "尚硅谷拔河争霸赛",
            "凝聚你好，放飞梦想",
            "抱歉没座位了",
            "7月就业名单全部曝光",
            "平均起薪11345元"
    };
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            int item = viewPager.getCurrentItem() + 1;
            viewPager.setCurrentItem(item);
            //延迟发消息
            handler.sendEmptyMessageDelayed(0, 3000);
        }
    };
    private boolean isDragging = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化值
        viewPager = findViewById(R.id.viewpager);
        tv_title = findViewById(R.id.tv_title);
        ll_point_group = findViewById(R.id.ll_point_group);
        imageViews = new ArrayList<>();

        for (int i = 0; i < imageIds.length; i++) {
            ImageView imageView = new ImageView(this);
            imageView.setBackgroundResource(imageIds[i]);
            //添加到集合中
            imageViews.add(imageView);
            //添加点
            ImageView point = new ImageView(this);
            point.setBackgroundResource(R.drawable.point_selector);
            //在代码中设置的都是像素，问题：所有手机上都是8个像素
            //把8px当成dp-->px
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(DensityUtil.dip2px(this, 8), DensityUtil.dip2px(this, 8));
            if (i == 0) {
                point.setEnabled(true);
            } else {
                point.setEnabled(false);
                params.leftMargin = 8;
            }
            point.setLayoutParams(params);
            ll_point_group.addView(point);
        }
        viewPager.setAdapter(new MyPageAdapter());

        //设置监听ViewPager页面的改变
        viewPager.addOnPageChangeListener(new MyChangeAdapter());

        //设置中间位置 要保证imageviews的整数值（一开始就可以向左滑动）
        int item = Integer.MAX_VALUE / 2 - Integer.MAX_VALUE / 2 % imageViews.size();
        viewPager.setCurrentItem(item);
        tv_title.setText(imageDescriptions[prePosition]);

        //发消息（自动轮播）
        handler.sendEmptyMessageDelayed(0, 2000);
    }

    /**
     * 自定义类，设置监听ViewPager页面的改变
     */
    class MyChangeAdapter implements ViewPager.OnPageChangeListener {
        /**
         * 当页面滚动时回调这个方法
         *
         * @param i  当前页面的位置
         * @param v  滑动页面的百分比
         * @param i1 在屏幕上滑动的像素
         */
        @Override
        public void onPageScrolled(int i, float v, int i1) {

        }

        /**
         * 当某个页面被选中了的时候回调
         *
         * @param i 被选中页面的位置
         */
        @Override
        public void onPageSelected(int i) {
            int realPosition = i % imageViews.size();
            //设置对应页面的文本信息
            tv_title.setText(imageDescriptions[realPosition]);
            //把上一个高亮的设置为默认--灰色
            ll_point_group.getChildAt(prePosition).setEnabled(false);
            //当前的设置为高亮--红色
            ll_point_group.getChildAt(realPosition).setEnabled(true);
            prePosition = realPosition;
        }

        /**
         * 当页面滚动状态变化的时候回调这个方法
         * 静止 --> 滑动
         * 滑动 --> 静止
         * 静止 --> 拖拽
         *
         * @param i
         */
        @Override
        public void onPageScrollStateChanged(int i) {
            //（处理在拖动的时候，不自动轮播）
            if (i == ViewPager.SCROLL_STATE_DRAGGING) {
                //拖拽
                isDragging = true;
                handler.removeCallbacksAndMessages(null);
            } else if (i == ViewPager.SCROLL_STATE_SETTLING) {
                //滑动
            } else if (i == ViewPager.SCROLL_STATE_IDLE && isDragging) {
                //静止
                isDragging = false;
                handler.removeCallbacksAndMessages(null);
                handler.sendEmptyMessageDelayed(0, 3000);
            }
        }
    }

    /**
     * 自定义的PagerAdapter对象
     */
    class MyPageAdapter extends PagerAdapter {

        /**
         * 得到图片的总数（设置最大值，实现可以循环轮播）
         *
         * @return
         */
        @Override
        public int getCount() {
            //return imageViews.size();
            return Integer.MAX_VALUE;
        }

        /**
         * 相当于getview方法
         *
         * @param container ViewPager自身
         * @param position  当前实例化页面的位置
         * @return
         */
        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            int realPosition = position % imageViews.size();
            ImageView imageView = imageViews.get(realPosition);
            //添加到ViewPager中
            container.addView(imageView);
            imageView.setOnTouchListener((v, event) -> {
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        //按下（去掉自动轮播）
                        handler.removeCallbacksAndMessages(null);
                        break;
                    case MotionEvent.ACTION_MOVE:
                        //移动
                        break;
                    case MotionEvent.ACTION_UP:
                        //离开（添加自动轮播）
                        handler.sendEmptyMessageDelayed(0, 3000);
                        break;
                    default:
                        break;
                }
                return false;
            });
            imageView.setTag(position);
            imageView.setOnClickListener((v) -> {
                int p = (int) v.getTag() % imageViews.size();
                String text = imageDescriptions[p];
                Toast.makeText(MainActivity.this, "text=" + text, Toast.LENGTH_SHORT).show();
            });
            return imageView;
        }

        /**
         * 比较view和object是否同一个实例
         *
         * @param view   页面
         * @param object 是instantiateItem方法返回的结果
         * @return
         */
        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == object;
        }

        /**
         * 释放资源
         *
         * @param container ViewPager
         * @param position  要释放的位置
         * @param object    要释放的页面
         */
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View) object);
        }
    }
}
